From 4764f8d714ca974964bf147016b41128a0335b97 Mon Sep 17 00:00:00 2001 From: tsteven4 Date: Fri, 19 Oct 2018 06:13:51 -0600 Subject: [PATCH] Replace queues with Qlist in session handling. (#263) session tracks a possible series of input formats and input filenames. --- csv_util.cc | 4 +-- defs.h | 4 +-- main.cc | 6 ++-- mmo.cc | 2 +- session.cc | 82 ++++++++--------------------------------------------- session.h | 35 ++++++++--------------- 6 files changed, 32 insertions(+), 101 deletions(-) diff --git a/csv_util.cc b/csv_util.cc index d35227e3c..af70bfa5b 100644 --- a/csv_util.cc +++ b/csv_util.cc @@ -2090,10 +2090,10 @@ xcsv_waypt_pr(const Waypoint* wpt) break; /* specials */ case XT_FILENAME: - buff = QString().sprintf(fmp.printfc.constData(), wpt->session->filename); + buff = QString().sprintf(fmp.printfc.constData(), CSTR(wpt->session->filename)); break; case XT_FORMAT: - buff = QString().sprintf(fmp.printfc.constData(), wpt->session->name); + buff = QString().sprintf(fmp.printfc.constData(), CSTR(wpt->session->name)); break; case -1: if (strncmp(fmp.key.constData(), "LON_10E", 7) == 0) { diff --git a/defs.h b/defs.h index 2958bc15f..0ab96ff0f 100644 --- a/defs.h +++ b/defs.h @@ -532,7 +532,7 @@ public: float odometer_distance; /* Meters? */ geocache_data* gc_data; format_specific_data* fs; - session_t* session; /* pointer to a session struct */ + const session_t* session; /* pointer to a session struct */ void* extra_data; /* Extra data added by, say, a filter. */ public: @@ -660,7 +660,7 @@ public: unsigned short cet_converted; /* strings are converted to UTF8; interesting only for input */ gb_color line_color; /* Optional line color for rendering */ int line_width; /* in pixels (sigh). < 0 is unknown. */ - session_t* session; /* pointer to a session struct */ + const session_t* session; /* pointer to a session struct */ public: route_head(); diff --git a/main.cc b/main.cc index 3776e31fb..e5b76857f 100644 --- a/main.cc +++ b/main.cc @@ -383,7 +383,7 @@ main(int argc, char* argv[]) cet_convert_init(ivecs->encode, ivecs->fixed_encode); /* init by module vec */ - start_session(ivecs->name, CSTR(fname)); + start_session(ivecs->name, fname); ivecs->rd_init(fname); ivecs->read(); ivecs->rd_deinit(); @@ -607,7 +607,7 @@ main(int argc, char* argv[]) cet_convert_init(ivecs->encode, 1); - start_session(ivecs->name, CSTR(qargs.at(0))); + start_session(ivecs->name, qargs.at(0)); if (ivecs->rd_init == nullptr) { fatal("Format does not support reading.\n"); } @@ -671,7 +671,7 @@ main(int argc, char* argv[]) if (fname.isEmpty()) { fatal("An input file (-f) must be specified.\n"); } - start_session(ivecs->name, CSTR(fname)); + start_session(ivecs->name, fname); ivecs->position_ops.rd_init(fname); } diff --git a/mmo.cc b/mmo.cc index 7adb3e675..2c55cd63d 100644 --- a/mmo.cc +++ b/mmo.cc @@ -1230,7 +1230,7 @@ mmo_write_wpt_cb(const Waypoint* wpt) if (cx != nullptr) { char* kml = nullptr; - if (strcmp(wpt->session->name, "kml") == 0) { + if (wpt->session->name == QLatin1String("kml")) { utf_string tmp(true, cx); cx = kml = strip_html(&tmp); } diff --git a/session.cc b/session.cc index 6afb27181..f3be806fe 100644 --- a/session.cc +++ b/session.cc @@ -22,95 +22,37 @@ #include "defs.h" #include "session.h" -static queue session_list; -static int session_ct; +#include // for QList -static void session_free(session_t* s); +static QList session_list; void session_init() { - QUEUE_INIT(&session_list); - session_ct = 0; + session_list.clear(); } void session_exit() { - queue* elem, *tmp; - - QUEUE_FOR_EACH(&session_list, elem, tmp) { - session_t* s = reinterpret_cast(elem); - dequeue(&s->Q); - session_free(s); - } + session_list.clear(); } void -start_session(const char* name, const char* filename) +start_session(const QString& name, const QString& filename) { - if (session_ct == 0) { - QUEUE_INIT(&session_list); - } - session_ct++; - - session_t* s = (session_t*) xcalloc(1, sizeof(*s)); - ENQUEUE_TAIL(&session_list, &s->Q); - QUEUE_INIT(&s->category_list); - s->nr = session_ct; - s->name = name; - s->filename = xstrdup(filename); + session_list.append(session_t(name, filename)); } -session_t* +const session_t* curr_session() { - return reinterpret_cast(session_list.prev); -} - -/* in work - -int -session_add_category(const char *name, const int id) -{ - queue *elem, *tmp; - session_t *s; - category_t *c; - - s = curr_session(); - - QUEUE_FOR_EACH(&s->category_list, elem, tmp) { - c = (category_t *) elem; - if (case_ignore_strcmp(c->name, name) == 0) { - if (id >= 0) c->id = id; - return c->id; - } - - } - - c = xmalloc(sizeof(*c)); - c->name = xstrdup(name); - if (id < 0) c->id = -(++s->unknown_category_ct); - else c->id = id; - - s->category_ct++; - ENQUEUE_TAIL(&s->category_list, &c->Q); - - return c->id; + if (!session_list.isEmpty()) { + return &session_list.last(); + } else { + fatal("Attempt to fetch session outside of session range."); + } } -*/ /* non public functions */ -static void -session_free(session_t* s) -{ - queue* elem, *tmp; - QUEUE_FOR_EACH(&s->category_list, elem, tmp) { - category_t* c = reinterpret_cast(elem); - dequeue(&c->Q); - xfree(c); - } - xfree(s->filename); - xfree(s); -} diff --git a/session.h b/session.h index 1a32385cb..9487b8729 100644 --- a/session.h +++ b/session.h @@ -22,32 +22,21 @@ #ifndef SESSION_H_INCLUDED_ #define SESSION_H_INCLUDED_ -#include "queue.h" - -typedef struct { - queue Q; - int id; - char* name; -} category_t; - -typedef struct { - queue Q; - int nr; - const char* name; /* in normal case the name of a format */ - char* filename; /* used file within format */ - int category_ct; - int unknown_category_ct; /* added without id */ - queue category_list; -} session_t; +#include // for QString + +struct session_t { +public: + QString name; /* in normal case the name of a format */ + QString filename; /* used file within format */ + +public: + session_t(const QString& name_p, const QString& filename_p) : name{name_p},filename{filename_p} {} +}; void session_init(void); void session_exit(void); -void start_session(const char* name, const char* filename); -session_t* curr_session(void); - -/* in work -int session_add_category(const char *name, const int id); -*/ +void start_session(const QString& name, const QString& filename); +const session_t* curr_session(void); #endif // SESSION_H_INCLUDED_ -- 2.30.2